The cost, in both computation and time, of performing a two-phase commit across distributed transactional resources is high. The transactional manager must coordinate across multiple types of resource managers to deliver a consistent outcome, i.e., commit or rollback. Resource managers can communicate with a transaction manager in different ways. For example, a Java Transaction API/Distributed Transaction (JTA/XA) compliant resource manager receives protocol messages using an XAResource implementation provided by the resource manager, while a Resource Recovery Services (RRS) compliant resource manager receives protocol messages through exits which it has registered with RRS, offered by International Business Machines Corporation. Often a JTA/XA resource manager communicates over TCP/IP, while an RRS compliant resource manager uses cross-memory communication within the same physical system.
A product like the WebSphere® Application Server, offered by International Business Machines Corporation, often has to deal with multiple types of resource managers. Optimization is difficult in this case because each type of resource manager operates differently. In practice, a single transaction will not need to make updates to all types of resource managers, however, today the transaction manager must support such a scenario.